const fp = require('loadsh/fp');
const { Container, Maybe } = require('./3-support.js');

// 练习 1：使用fp.add(x,y) 和 fp.map(f,x) 创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([5, 6, 1]);

let ex1 = () => {
    return maybe.map(fp.map(fp.add(1)));
};

console.log('ex1', ex1());


// 练习 2：实现一个函数，能够是用fp.first获取列表的第一个元素
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do']);

let ex2 = () => {
    return xs.map(fp.first);
};

console.log('ex2', ex2());


// 练习 3：实现一个函数，使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function (x, o) {
    return Maybe.of(o[x]);
});
let user = { id: 2, name: 'Albert' };

let ex3 = () => {
    return safeProp('name')(user).map(fp.first);
};

console.log('ex3', ex3());


// 练习 4：使用Maybe重写ex4, 不要有if语句
// let ex4 = function (n) {
//     if(n) {
//         return parseInt(n)
//     }
// }

let ex4 = (n) => {
    return Maybe.of(n).map(parseInt)
};

console.log('ex4', ex4(1.23))